--- /dev/null
+/*
+ * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <assert.h>
+
+#include <platform_def.h>
+
+#include <arch_helpers.h>
+#include <drivers/arm/css/css_mhu.h>
+#include <lib/bakery_lock.h>
+#include <lib/mmio.h>
+#include <plat/arm/common/plat_arm.h>
+
+/* SCP MHU secure channel registers */
+#define SCP_INTR_S_STAT 0x200
+#define SCP_INTR_S_SET 0x208
+#define SCP_INTR_S_CLEAR 0x210
+
+/* CPU MHU secure channel registers */
+#define CPU_INTR_S_STAT 0x300
+#define CPU_INTR_S_SET 0x308
+#define CPU_INTR_S_CLEAR 0x310
+
+ARM_INSTANTIATE_LOCK;
+
+/* Weak definition may be overridden in specific CSS based platform */
+#pragma weak plat_arm_pwrc_setup
+
+
+/*
+ * Slot 31 is reserved because the MHU hardware uses this register bit to
+ * indicate a non-secure access attempt. The total number of available slots is
+ * therefore 31 [30:0].
+ */
+#define MHU_MAX_SLOT_ID 30
+
+void mhu_secure_message_start(unsigned int slot_id)
+{
+ assert(slot_id <= MHU_MAX_SLOT_ID);
+
+ arm_lock_get();
+
+ /* Make sure any previous command has finished */
+ while (mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) &
+ (1 << slot_id))
+ ;
+}
+
+void mhu_secure_message_send(unsigned int slot_id)
+{
+ assert(slot_id <= MHU_MAX_SLOT_ID);
+ assert(!(mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) &
+ (1 << slot_id)));
+
+ /* Send command to SCP */
+ mmio_write_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_SET, 1 << slot_id);
+}
+
+uint32_t mhu_secure_message_wait(void)
+{
+ /* Wait for response from SCP */
+ uint32_t response;
+ while (!(response = mmio_read_32(PLAT_CSS_MHU_BASE + SCP_INTR_S_STAT)))
+ ;
+
+ return response;
+}
+
+void mhu_secure_message_end(unsigned int slot_id)
+{
+ assert(slot_id <= MHU_MAX_SLOT_ID);
+
+ /*
+ * Clear any response we got by writing one in the relevant slot bit to
+ * the CLEAR register
+ */
+ mmio_write_32(PLAT_CSS_MHU_BASE + SCP_INTR_S_CLEAR, 1 << slot_id);
+
+ arm_lock_release();
+}
+
+void __init mhu_secure_init(void)
+{
+ arm_lock_init();
+
+ /*
+ * The STAT register resets to zero. Ensure it is in the expected state,
+ * as a stale or garbage value would make us think it's a message we've
+ * already sent.
+ */
+ assert(mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) == 0);
+}
+
+void __init plat_arm_pwrc_setup(void)
+{
+ mhu_secure_init();
+}
--- /dev/null
+/*
+ * Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <platform_def.h>
+
+#include <arch_helpers.h>
+#include <drivers/arm/css/css_mhu_doorbell.h>
+#include <drivers/arm/css/scmi.h>
+
+void mhu_ring_doorbell(struct scmi_channel_plat_info *plat_info)
+{
+ MHU_RING_DOORBELL(plat_info->db_reg_addr,
+ plat_info->db_modify_mask,
+ plat_info->db_preserve_mask);
+ return;
+}
+
+void mhuv2_ring_doorbell(struct scmi_channel_plat_info *plat_info)
+{
+ /* wake receiver */
+ MHU_V2_ACCESS_REQUEST(MHUV2_BASE_ADDR);
+
+ /* wait for receiver to acknowledge its ready */
+ while (MHU_V2_IS_ACCESS_READY(MHUV2_BASE_ADDR) == 0)
+ ;
+
+ MHU_RING_DOORBELL(plat_info->db_reg_addr,
+ plat_info->db_modify_mask,
+ plat_info->db_preserve_mask);
+
+ /* clear the access request for the receiver */
+ MHU_V2_CLEAR_REQUEST(MHUV2_BASE_ADDR);
+
+ return;
+}
--- /dev/null
+/*
+ * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef CSS_MHU_H
+#define CSS_MHU_H
+
+#include <stdint.h>
+
+void mhu_secure_message_start(unsigned int slot_id);
+void mhu_secure_message_send(unsigned int slot_id);
+uint32_t mhu_secure_message_wait(void);
+void mhu_secure_message_end(unsigned int slot_id);
+
+void mhu_secure_init(void);
+
+#endif /* CSS_MHU_H */
--- /dev/null
+/*
+ * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef CSS_MHU_DOORBELL_H
+#define CSS_MHU_DOORBELL_H
+
+#include <stdint.h>
+
+#include <lib/mmio.h>
+
+/* MHUv2 Base Address */
+#define MHUV2_BASE_ADDR PLAT_CSS_MHU_BASE
+
+/* MHUv2 Control Registers Offsets */
+#define MHU_V2_MSG_NO_CAP_OFFSET 0xF80
+#define MHU_V2_ACCESS_REQ_OFFSET 0xF88
+#define MHU_V2_ACCESS_READY_OFFSET 0xF8C
+
+#define SENDER_REG_STAT(_channel) (0x20 * (_channel))
+#define SENDER_REG_SET(_channel) ((0x20 * (_channel)) + 0xC)
+
+/* Helper macro to ring doorbell */
+#define MHU_RING_DOORBELL(addr, modify_mask, preserve_mask) do { \
+ uint32_t db = mmio_read_32(addr) & (preserve_mask); \
+ mmio_write_32(addr, db | (modify_mask)); \
+ } while (0)
+
+#define MHU_V2_ACCESS_REQUEST(addr) \
+ mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x1)
+
+#define MHU_V2_CLEAR_REQUEST(addr) \
+ mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x0)
+
+#define MHU_V2_IS_ACCESS_READY(addr) \
+ (mmio_read_32((addr) + MHU_V2_ACCESS_READY_OFFSET) & 0x1)
+
+struct scmi_channel_plat_info;
+void mhu_ring_doorbell(struct scmi_channel_plat_info *plat_info);
+void mhuv2_ring_doorbell(struct scmi_channel_plat_info *plat_info);
+
+#endif /* CSS_MHU_DOORBELL_H */
* SPDX-License-Identifier: BSD-3-Clause
*/
+#include <drivers/arm/css/css_mhu_doorbell.h>
#include <drivers/arm/css/scmi.h>
#include <plat/arm/common/plat_arm.h>
#include <plat/arm/css/common/css_pm.h>
#include <plat/common/platform.h>
#include <platform_def.h>
-#include "../../css/drivers/mhu/css_mhu_doorbell.h"
-
#if CSS_USE_SCMI_SDS_DRIVER
static scmi_channel_plat_info_t juno_scmi_plat_info = {
.scmi_mbx_mem = CSS_SCMI_PAYLOAD_BASE,
#include <platform_def.h>
+#include <drivers/arm/css/css_mhu_doorbell.h>
#include <drivers/arm/css/scmi.h>
#include <plat/arm/common/plat_arm.h>
-#include "../../css/drivers/mhu/css_mhu_doorbell.h"
-
static scmi_channel_plat_info_t n1sdp_scmi_plat_info = {
.scmi_mbx_mem = N1SDP_SCMI_PAYLOAD_BASE,
.db_reg_addr = PLAT_CSS_MHU_BASE + CSS_SCMI_MHU_DB_REG_OFF,
plat/arm/css/common/css_topology.c
ifeq (${CSS_USE_SCMI_SDS_DRIVER},0)
-BL31_SOURCES += plat/arm/css/drivers/scp/css_pm_scpi.c \
- plat/arm/css/drivers/mhu/css_mhu.c \
+BL31_SOURCES += drivers/arm/css/mhu/css_mhu.c \
+ plat/arm/css/drivers/scp/css_pm_scpi.c \
plat/arm/css/drivers/scpi/css_scpi.c
else
-BL31_SOURCES += drivers/arm/css/scmi/scmi_ap_core_proto.c \
+BL31_SOURCES += drivers/arm/css/mhu/css_mhu_doorbell.c \
+ drivers/arm/css/scmi/scmi_ap_core_proto.c \
drivers/arm/css/scmi/scmi_common.c \
drivers/arm/css/scmi/scmi_pwr_dmn_proto.c \
drivers/arm/css/scmi/scmi_sys_pwr_proto.c \
- plat/arm/css/drivers/scp/css_pm_scmi.c \
- plat/arm/css/drivers/mhu/css_mhu_doorbell.c
+ plat/arm/css/drivers/scp/css_pm_scmi.c
endif
# Process CSS_LOAD_SCP_IMAGES flag
BL2_SOURCES += plat/arm/css/drivers/scp/css_sds.c \
plat/arm/css/drivers/sds/sds.c
else
- BL2U_SOURCES += plat/arm/css/drivers/scp/css_bom_bootloader.c \
- plat/arm/css/drivers/mhu/css_mhu.c \
+ BL2U_SOURCES += drivers/arm/css/mhu/css_mhu.c \
+ plat/arm/css/drivers/scp/css_bom_bootloader.c \
plat/arm/css/drivers/scpi/css_scpi.c
- BL2_SOURCES += plat/arm/css/drivers/scp/css_bom_bootloader.c \
- plat/arm/css/drivers/mhu/css_mhu.c \
+ BL2_SOURCES += drivers/arm/css/mhu/css_mhu.c \
+ plat/arm/css/drivers/scp/css_bom_bootloader.c \
plat/arm/css/drivers/scpi/css_scpi.c
# Enable option to detect whether the SCP ROM firmware in use predates version
# 1.7.0 and therefore, is incompatible.
plat/arm/css/common/css_topology.c
ifeq (${CSS_USE_SCMI_SDS_DRIVER},0)
-BL32_SOURCES += plat/arm/css/drivers/scp/css_pm_scpi.c \
- plat/arm/css/drivers/mhu/css_mhu.c \
+BL32_SOURCES += drivers/arm/css/mhu/css_mhu.c \
+ plat/arm/css/drivers/scp/css_pm_scpi.c \
plat/arm/css/drivers/scpi/css_scpi.c
else
-BL32_SOURCES += drivers/arm/css/scmi/scmi_common.c \
+BL32_SOURCES += drivers/arm/css/mhu/css_mhu_doorbell.c \
+ drivers/arm/css/scmi/scmi_common.c \
drivers/arm/css/scmi/scmi_pwr_dmn_proto.c \
drivers/arm/css/scmi/scmi_sys_pwr_proto.c \
- plat/arm/css/drivers/scp/css_pm_scmi.c \
- plat/arm/css/drivers/mhu/css_mhu_doorbell.c
+ plat/arm/css/drivers/scp/css_pm_scmi.c
endif
+++ /dev/null
-/*
- * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <assert.h>
-
-#include <platform_def.h>
-
-#include <arch_helpers.h>
-#include <lib/bakery_lock.h>
-#include <lib/mmio.h>
-#include <plat/arm/common/plat_arm.h>
-
-#include "css_mhu.h"
-
-/* SCP MHU secure channel registers */
-#define SCP_INTR_S_STAT 0x200
-#define SCP_INTR_S_SET 0x208
-#define SCP_INTR_S_CLEAR 0x210
-
-/* CPU MHU secure channel registers */
-#define CPU_INTR_S_STAT 0x300
-#define CPU_INTR_S_SET 0x308
-#define CPU_INTR_S_CLEAR 0x310
-
-ARM_INSTANTIATE_LOCK;
-
-/* Weak definition may be overridden in specific CSS based platform */
-#pragma weak plat_arm_pwrc_setup
-
-
-/*
- * Slot 31 is reserved because the MHU hardware uses this register bit to
- * indicate a non-secure access attempt. The total number of available slots is
- * therefore 31 [30:0].
- */
-#define MHU_MAX_SLOT_ID 30
-
-void mhu_secure_message_start(unsigned int slot_id)
-{
- assert(slot_id <= MHU_MAX_SLOT_ID);
-
- arm_lock_get();
-
- /* Make sure any previous command has finished */
- while (mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) &
- (1 << slot_id))
- ;
-}
-
-void mhu_secure_message_send(unsigned int slot_id)
-{
- assert(slot_id <= MHU_MAX_SLOT_ID);
- assert(!(mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) &
- (1 << slot_id)));
-
- /* Send command to SCP */
- mmio_write_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_SET, 1 << slot_id);
-}
-
-uint32_t mhu_secure_message_wait(void)
-{
- /* Wait for response from SCP */
- uint32_t response;
- while (!(response = mmio_read_32(PLAT_CSS_MHU_BASE + SCP_INTR_S_STAT)))
- ;
-
- return response;
-}
-
-void mhu_secure_message_end(unsigned int slot_id)
-{
- assert(slot_id <= MHU_MAX_SLOT_ID);
-
- /*
- * Clear any response we got by writing one in the relevant slot bit to
- * the CLEAR register
- */
- mmio_write_32(PLAT_CSS_MHU_BASE + SCP_INTR_S_CLEAR, 1 << slot_id);
-
- arm_lock_release();
-}
-
-void __init mhu_secure_init(void)
-{
- arm_lock_init();
-
- /*
- * The STAT register resets to zero. Ensure it is in the expected state,
- * as a stale or garbage value would make us think it's a message we've
- * already sent.
- */
- assert(mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) == 0);
-}
-
-void __init plat_arm_pwrc_setup(void)
-{
- mhu_secure_init();
-}
+++ /dev/null
-/*
- * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef CSS_MHU_H
-#define CSS_MHU_H
-
-#include <stdint.h>
-
-void mhu_secure_message_start(unsigned int slot_id);
-void mhu_secure_message_send(unsigned int slot_id);
-uint32_t mhu_secure_message_wait(void);
-void mhu_secure_message_end(unsigned int slot_id);
-
-void mhu_secure_init(void);
-
-#endif /* CSS_MHU_H */
+++ /dev/null
-/*
- * Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#include <platform_def.h>
-
-#include <arch_helpers.h>
-#include <drivers/arm/css/scmi.h>
-
-#include "css_mhu_doorbell.h"
-
-void mhu_ring_doorbell(struct scmi_channel_plat_info *plat_info)
-{
- MHU_RING_DOORBELL(plat_info->db_reg_addr,
- plat_info->db_modify_mask,
- plat_info->db_preserve_mask);
- return;
-}
-
-void mhuv2_ring_doorbell(struct scmi_channel_plat_info *plat_info)
-{
- /* wake receiver */
- MHU_V2_ACCESS_REQUEST(MHUV2_BASE_ADDR);
-
- /* wait for receiver to acknowledge its ready */
- while (MHU_V2_IS_ACCESS_READY(MHUV2_BASE_ADDR) == 0)
- ;
-
- MHU_RING_DOORBELL(plat_info->db_reg_addr,
- plat_info->db_modify_mask,
- plat_info->db_preserve_mask);
-
- /* clear the access request for the receiver */
- MHU_V2_CLEAR_REQUEST(MHUV2_BASE_ADDR);
-
- return;
-}
+++ /dev/null
-/*
- * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef CSS_MHU_DOORBELL_H
-#define CSS_MHU_DOORBELL_H
-
-#include <stdint.h>
-
-#include <lib/mmio.h>
-
-/* MHUv2 Base Address */
-#define MHUV2_BASE_ADDR PLAT_CSS_MHU_BASE
-
-/* MHUv2 Control Registers Offsets */
-#define MHU_V2_MSG_NO_CAP_OFFSET 0xF80
-#define MHU_V2_ACCESS_REQ_OFFSET 0xF88
-#define MHU_V2_ACCESS_READY_OFFSET 0xF8C
-
-#define SENDER_REG_STAT(_channel) (0x20 * (_channel))
-#define SENDER_REG_SET(_channel) ((0x20 * (_channel)) + 0xC)
-
-/* Helper macro to ring doorbell */
-#define MHU_RING_DOORBELL(addr, modify_mask, preserve_mask) do { \
- uint32_t db = mmio_read_32(addr) & (preserve_mask); \
- mmio_write_32(addr, db | (modify_mask)); \
- } while (0)
-
-#define MHU_V2_ACCESS_REQUEST(addr) \
- mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x1)
-
-#define MHU_V2_CLEAR_REQUEST(addr) \
- mmio_write_32((addr) + MHU_V2_ACCESS_REQ_OFFSET, 0x0)
-
-#define MHU_V2_IS_ACCESS_READY(addr) \
- (mmio_read_32((addr) + MHU_V2_ACCESS_READY_OFFSET) & 0x1)
-
-struct scmi_channel_plat_info;
-void mhu_ring_doorbell(struct scmi_channel_plat_info *plat_info);
-void mhuv2_ring_doorbell(struct scmi_channel_plat_info *plat_info);
-
-#endif /* CSS_MHU_DOORBELL_H */
#include <arch_helpers.h>
#include <common/debug.h>
+#include <drivers/arm/css/css_mhu.h>
#include <plat/common/platform.h>
#include <platform_def.h>
-#include "../mhu/css_mhu.h"
#include "../scpi/css_scpi.h"
#include "css_scp.h"
#include <arch_helpers.h>
#include <common/debug.h>
+#include <drivers/arm/css/css_mhu.h>
#include <lib/utils.h>
#include <plat/common/platform.h>
#include <platform_def.h>
-#include "../mhu/css_mhu.h"
#include "css_scpi.h"
#define SCPI_SHARED_MEM_SCP_TO_AP PLAT_CSS_SCP_COM_SHARED_MEM_BASE
#include <common/bl_common.h>
#include <common/debug.h>
+#include <drivers/arm/css/css_mhu_doorbell.h>
#include <drivers/arm/css/scmi.h>
#include <plat/arm/common/plat_arm.h>
#include <sgi_ras.h>
#include <sgi_variant.h>
-#include "../../css/drivers/mhu/css_mhu_doorbell.h"
-
sgi_platform_info_t sgi_plat_info;
static scmi_channel_plat_info_t sgi575_scmi_plat_info = {
#include <common/bl_common.h>
#include <common/debug.h>
+#include <drivers/arm/css/css_mhu_doorbell.h>
#include <drivers/arm/css/scmi.h>
#include <plat/arm/common/plat_arm.h>
#include <sgm_plat_config.h>
-#include "../../css/drivers/mhu/css_mhu_doorbell.h"
static scmi_channel_plat_info_t sgm775_scmi_plat_info = {
.scmi_mbx_mem = CSS_SCMI_PAYLOAD_BASE,